import dayjs from 'dayjs'

/**
 * 生成时间段列表
 * @param {string} startTime - 开始时间，格式为 YYYYMMDDHHmmss
 * @param {string} endTime - 结束时间，格式为 YYYYMMDDHHmmss
 * @param {number} oneTime - 每个时间段的时长（分钟）
 * @returns {Array} 时间段列表
 */
export function generateTimeSlots(startTime: string, endTime: string, oneTime: number) {
  const slots = []

  let current = dayjs(startTime, 'YYYYMMDDHHmmss')
  const end = dayjs(endTime, 'YYYYMMDDHHmmss')

  // 迭代生成时间段，直到达到结束时间
  while (current.isBefore(end)) {
    const next = current.add(oneTime, 'minute')

    // 防止超出结束时间
    if (next.isAfter(end)) break

    // 将格式化的时间段信息推入数组
    slots.push({
      timeDivision: `${current.format('HH:mm')}-${next.format('HH:mm')}`,
      startTime: current.format('HHmmss'),
      endTime: next.format('HHmmss'),
    })

    current = next
  }

  return slots
}

/**
 * 判断订场时间是否在门店营业时间范围内
 * @param {string} startTime - 订场开始时间 (HHmm)
 * @param {string} endTime - 订场结束时间 (HHmm)
 * @param {string} storeOpenTime - 门店营业开始时间 (HHmm)
 * @param {string} storeCloseTime - 门店营业结束时间 (HHmm)
 * @returns {boolean} 是否在营业时间范围内
 */
export function isBookingWithinStoreHours(
  startTime: string,
  endTime: string,
  storeOpenTime: string,
  storeCloseTime: string,
) {
  const start = dayjs(startTime, 'HHmmss')
  const end = dayjs(endTime, 'HHmmss')
  const open = dayjs(storeOpenTime, 'HHmmss')
  const close = dayjs(storeCloseTime, 'HHmmss')
  return start.isSameOrAfter(open) && end.isSameOrBefore(close)
}

/**
 * 计算两个时间的毫秒级差值
 * @param {string} startTime - 开始时间（格式：YYYYMMDDHHmmss）
 * @param {string} endTime - 结束时间（格式：YYYYMMDDHHmmss）
 * @returns {number} 毫秒级时间差
 */
export function getTimeDifference(startTime, endTime) {
  const start = dayjs(startTime, 'YYYYMMDDHHmmss')
  const end = dayjs(endTime, 'YYYYMMDDHHmmss')
  return end.diff(start, 'milliseconds')
}

// #ifdef MP-WEIXIN
export const urlTobase64 = (folder: string, fileName: string, format = 'png') => {
  const img = `/static/images/${folder}/${fileName}.${format}`
  const imgBase64 = wx.getFileSystemManager().readFileSync(img, 'base64')
  return `data:image/png;base64,${imgBase64}`
}
// #endif
